import 'reflect-metadata'

@Reflect.metadata('a', 'aaa')
class MyClass {
  myProperty: string
  // 给 name1 属性添加一个 address 元数据 ( 元数据是保存到 MyClass.prototype 上的 ) 值是 {name: 'zf'}
  @Reflect.metadata('address', {name: 'zf'})
  @Reflect.metadata('x', 'xx')
  @Reflect.metadata('y', 'yy')
  name1 = 'zs'

  constructor(value: string) {
    this.myProperty = value
  }

  // 给 myMethod 添加一个 data1 的元数据 ( 元数据是保存到 MyClass.prototype 上的 ) 其中值是 { a: 1, b: 2 }
  @Reflect.metadata('data1', { a: 1, b: 2 })
  // 给 myMethod 添加一个 data2 的元数据 其中值是 'c'
  @Reflect.metadata('data2', 'c')
  myMethod() {
    console.log('执行 myMethod')
  }
}

const instance = new MyClass('hello')

// getOwnMetadataKeys 获取 instance 实例对象的 myMethod 属性上的所有元数据键组成的数组 ( 不包含原型链 )
console.log(Reflect.getOwnMetadataKeys( instance, 'myMethod')) // [ ]

// getOwnMetadataKeys 获取 instance 实例对象原型上的 myMethod 属性上的所有元数据键组成的数组 ( 不包含原型链 )
console.log(Reflect.getOwnMetadataKeys(Object.getPrototypeOf(instance), 'myMethod')) //[ 'data2', 'data1' ]
